package model.i;

import model.Statistics;
import model.playingfield.PlayingField;

public interface IModel {

    /**
     * Set a new State for the Model.
     * @param state - the new State
     */
    public void setState(IState state);

    /**
     * Get the current State of the Model, this will (among other things)
     * be used by Rules in order to facilitate changes to the game as turns
     * go along.
     * @return State - the current State of the Model
     */
    public IState getState();

    public Statistics getStatistics();

    public PlayingField getPlayingField();

    /**
     * Add a new class fulfilling the IRules interface, in order
     * to determine how the game should play.
     * @param rules
     */
    public void setRules(IRules rules);

    /**
     * move to the next player. Perform checks so that that player actually
     * exists, and go back to the beginning if the last player is currently playing.
     * Also, clean up the State after the current turn.
     */
    public void newTurn();
}
